package com.ruoyi.system.mapper;

import java.time.LocalDateTime;
import java.util.List;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.domain.TbDeviceInfo;
import com.ruoyi.system.domain.vo.TbDeviceAndInfoDetailVO;
import com.ruoyi.system.domain.vo.TbDeviceInfoVO;
import com.ruoyi.system.domain.vo.TbDeviceVO;
import org.apache.ibatis.annotations.Param;

/**
 * 设备基础信息Mapper接口
 * 
 * @author ruoyi
 * @date 2025-07-23
 */
public interface TbDeviceInfoMapper 
{
    /**
     * 查询设备基础信息
     * 
     * @param id 设备基础信息主键
     * @return 设备基础信息
     */
    public TbDeviceInfo selectTbDeviceInfoById(Long id);

    /**
     * 查询设备基础信息列表
     * 
     * @param tbDeviceInfo 设备基础信息
     * @return 设备基础信息集合
     */
    public List<TbDeviceInfo> selectTbDeviceInfoList(TbDeviceInfo tbDeviceInfo);

    /**
     * 新增设备基础信息
     * 
     * @param tbDeviceInfo 设备基础信息
     * @return 结果
     */
    public int insertTbDeviceInfo(TbDeviceInfo tbDeviceInfo);

    /**
     * 修改设备基础信息
     * 
     * @param tbDeviceInfo 设备基础信息
     * @return 结果
     */
    public int updateTbDeviceInfo(TbDeviceInfo tbDeviceInfo);

    /**
     * 删除设备基础信息
     * 
     * @param id 设备基础信息主键
     * @return 结果
     */
    public int deleteTbDeviceInfoById(Long id);

    /**
     * 批量删除设备基础信息
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTbDeviceInfoByIds(Long[] ids);

    List<TbDeviceInfoVO> selectBypackageVersioncode(@Param("list") List<String> deviceSns);

    List<TbDeviceInfo> selectByDeviceSns(@Param("list") List<String> deviceSns);

    TbDeviceInfo selectByDeviceInfoSn(@Param("devSn") String sn);

    TbDeviceAndInfoDetailVO selectTbDeviceInfosById(Long id);

    List<TbDeviceInfo> selectLatestLocationByDeviceSns(@Param("deviceSns") List<String> deviceSns
            ,@Param("startDateTime") LocalDateTime startDateTime,@Param("endDateTime") LocalDateTime endDateTime);

}
